package sistema;

import controloBD.AcessoBD;
import controloBD.QueryResult;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

public class Resultado {

    private Long id_resultado;
    private Long id_evento;
    private String resultado;
    private int golos1;
    private int golos2;

    public Resultado(Long id_resultado, Long id_evento, String resultado, int golos1, int golos2) {
        this.id_resultado = id_resultado;
        this.id_evento = id_evento;
        this.resultado = resultado;
        this.golos1 = golos1;
        this.golos2 = golos2;

    }

    private Resultado(Vector tabela) {
        this.id_resultado = (Long) tabela.get(0);
        this.id_evento = (Long) tabela.get(1);
        this.resultado = (String) tabela.get(2);
        this.golos1 = (Integer) tabela.get(3);
        this.golos2 = (Integer) tabela.get(4);
    }

    /**
     * @return the id_resultado
     */
    public Long getId_resultado() {
        return id_resultado;
    }

    /**
     * @return the score1
     */
    public int getGolos1() {
        return golos1;
    }

    /**
     * @param score1 the score1 to set
     */
    public void setGolos1(int score1) {
        this.golos1 = score1;
    }

    /**
     * @return the score2
     */
    public int getGolos2() {
        return golos2;
    }

    /**
     * @param score2 the score2 to set
     */
    public void setGolos2(int score2) {
        this.golos2 = score2;
    }

    /**
     * @return the id_evento
     */
    public Long getId_evento() {
        return id_evento;
    }

    /**
     * @param id_evento the id_evento to set
     */
    public void setId_evento(Long id_evento) {
        this.id_evento = id_evento;
    }

    /**
     * @return the id_resultado
     */
    public String getRresultado() {
        return resultado;
    }

    /**
     * @param id_evento the id_evento to set
     */
    public void setResultado(String result) {
        this.resultado = result;
    }

    //public void actualiza resultado();
    // calcula vencedor
    // calcula goals
    //calcula points
    // calcula points no ténis
    //actualiza estado da aposta para FECHADA
    public static void insereResultado(Hashtable params) throws Exception {

        AcessoBD conexao = new AcessoBD();

        String qryName = new String("inserir_resultado");
        conexao.executeUpdate(qryName, params);
        conexao.closeBD();

    }

    public static Resultado devolveResultado(Long id_resultado) throws Exception {

        AcessoBD conexao = new AcessoBD();
        Hashtable<String, String> dadosResult = new Hashtable<String, String>();
        dadosResult.put("var_idresultado", id_resultado.toString());
        String qryName = new String("visualizar_por_id_resultado");
        QueryResult qr = conexao.executeSelect(qryName, dadosResult);
        conexao.closeBD();

        return new Resultado(qr.tabela());
    }

    public static List<Resultado> devolveUltimos() throws Exception {
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("devolve_todos");
        QueryResult qr = conexao.executeSelect(qryName, null);
        conexao.closeBD();

        return converteTabela(qr);
    }

    public static List<Resultado> devolveFutebol() throws Exception {
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("devolve_futebol");
        QueryResult qr = conexao.executeSelect(qryName, null);
        conexao.closeBD();

        return converteTabela(qr);
    }

    public static List<Resultado> devolveTenis() throws Exception {
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("devolve_tenis");
        QueryResult qr = conexao.executeSelect(qryName, null);
        conexao.closeBD();

        return converteTabela(qr);
    }

    //só devolve os 10 ultimos resultados!!!!
    public static List<Resultado> converteTabela(QueryResult qr) {

        List<Resultado> lista = new LinkedList<Resultado>();
        if (!qr.tabela().isEmpty()) {
            int i = qr.tabela().size() - 1;
            int j = 0;
            int num_linhas = 0;
            while (j < 10 && num_linhas < qr.tabela().size()) {
                Long id_resultad = (Long) qr.tabela().get(i - 4);
                Long id_event = (Long) qr.tabela().get(i - 3);
                String resultad = (String) qr.tabela().get(i - 2);
                int golos1 = (Integer) qr.tabela().get(i - 1);
                int golos2 = (Integer) qr.tabela().get(i);

                lista.add((new Resultado(id_resultad, id_event, resultad, golos1, golos2)));
                i = i - 5;
                num_linhas = num_linhas + 5;
                j++;
            }
            return lista;
        }

        return null;
    }

    public String golosToString() {
        return golos1 + "-" + golos2;
    }
}
